先從一個 Shell script 開始...
#!/bin/bash
# 確認特定的 file 是否存在並且是否可以被讀取
if [[ -e "$1" && -r "$1" ]]
then
echo -e "We can read the file."
exit 0
elif [[ ! -e "$1" ]]
then
echo -e "The file does not exist."
exit 2
elif [[ -e "$1" && ! -r "$1" ]]
then
echo -e "We don't have read permission for this file."
exit 1
else
echo -e "Error occured."
exit 5
fi
在此我們看到了幾個重點:
#!/bin/bash、if-else、-e、-r、exit
這些都是滿常見的語法~我們先來一一解析!
#!/bin/bash
是一個 shebang
(或稱作 hashbang
),用於告訴系統這個腳本應該使用哪個解釋器來執行。#!/bin/bash
具體表示這個腳本應該由 Bash shell
來執行。
#!
:
這個符號稱為 shebang
,告訴操作系統這是一個可執行的腳本,並且需要使用後面指定的解釋器。
/bin/bash
:
這是 Bash
解釋器的路徑,位於 /bin
目錄下。
當你執行這個腳本時,系統會按照 #!/bin/bash
指定的 Bash shell
來解析和執行腳本內容。
簡單來說,#!/bin/bash
用於編寫 Bash shell
腳本,確保系統使用正確的 shell
來執行這段程式碼。
if [[ 條件1 ]]; then
# 當條件1為真時執行的命令
elif [[ 條件2 ]]; then
# 當條件1為假且條件2為真時執行的命令
else
# 當條件1和條件2都為假時執行的命令
fi
範例:
#!/bin/bash
file="test.txt"
if [[ -f "$file" ]]; then
echo "File $file exists."
else
echo "File $file does not exist."
fi
此處的 -f 是在 Shell Script 中用來檢查一個文件是否存在並且是否為普通文件(regular file)的條件測試運算符。它會返回 true(即條件成立)當文件存在且是普通文件時,否則返回 false(條件不成立)。
-e 用來檢查指定的文件或目錄是否存在,無論它是文件還是目錄。只要存在就返回 true,否則返回 false。
用法:
if [[ -e 文件名 ]]; then
# 文件或目錄存在
else
# 文件或目錄不存在
fi
if [[ -e "/path/to/file_or_directory" ]]; then
echo "The file or directory exists."
else
echo "The file or directory does not exist."
fi
-r 用來檢查指定的文件是否可讀(即當前用戶是否有讀取該文件的權限)。如果文件可讀則返回 true,否則返回 false。
if [ -r 文件名 ]; then
# 文件可讀
else
# 文件不可讀
fi
file="/path/to/file"
if [[ -r "$file" ]]; then
echo "The file is readable."
else
echo "The file is not readable."
fi
-e
:檢查文件或目錄是否存在。-r
:檢查文件是否具有讀取權限(可讀)。這兩個選項常用於腳本中進行條件檢查,以確保操作的文件存在且具有相應的權限。
以下有其他常見的參數介紹:
-d 檢查是否為目錄
-r 檢查文件是否可讀
-w 檢查文件是否可寫
-x 檢查文件是否可執行
-s 檢查文件是否非空
exit 命令在 Shell Script 中用來終止腳本的執行,並可以返回一個狀態碼給操作系統或父進程。這個狀態碼通常用來指示腳本的執行結果,例如是否成功執行或者出現錯誤。
exit [n]
n 是一個可選的數字,表示腳本的退出狀態碼(exit status)。如果未指定數字,則默認返回上個命令的退出狀態碼(通常是 $? 的值)。
成功的狀態碼通常是 0。
其他非零值通常表示某些錯誤。
筆者列出一些退出狀態碼以及對應的含義:
大概了解這些錯誤碼後,我們就可以嘗試藉由上一個指令或是腳本的退出狀態來判斷執行結果~
如:
#!/bin/bash
[some_command here]
exit_status=$?
if [[ $exit_status -eq 0 ]]; then
echo "The command executed successfully."
else
echo "The command failed with exit status $exit_status."
fi